home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / 8087.arc / ROOT.ASM < prev    next >
Encoding:
Assembly Source File  |  1985-02-13  |  1.3 KB  |  62 lines

  1.     PAGE    ,132
  2.     TITLE    Quadratic Equation roots
  3. IF1
  4. INCLUDE 87MAC.LIB
  5. ENDIF
  6. ZZZ    SEGMENT STACK
  7.     DW    64 DUP(?)
  8. ZZZ    ENDS
  9. CODE    SEGMENT PUBLIC
  10.     ASSUME    CS:CODE,DS:CODE,ES:CODE
  11.     EXTRN    FLOAT_ASCII:NEAR
  12. A    DW    1
  13. B    DW    -5
  14. C    DW    6
  15. STATUS    DW    ?
  16. FOUR    DW    4
  17. TWO    DW    2
  18. ERROR_MSG    DB    'Roots are imaginary',10,13,'$'
  19. QUADRATIC    PROC    FAR
  20.     PUSH    DS
  21.     SUB    AX,AX
  22.     PUSH    AX
  23.     MOV    AX,CS
  24.     MOV    DS,AX
  25.     MOV    ES,AX
  26. DO_AGAIN:
  27.     FINIT            ;------ST0------;-----ST1-------
  28.     FILD    B        ;    B    ;
  29.     FMUL    ST0        ;     B**2    ;
  30.     FILD    A        ;    A    ;     B**2
  31.     FIMUL    FOUR        ;      4*A    ;     B**2
  32.     FIMUL    C        ;    4*A*C    ;     B**2
  33.     FSUBRP    ST1,ST0     ;  D=B**2-4AC    ;    ?
  34.     FTST            ;
  35.     FSTSW    STATUS
  36.     MOV    AH,BYTE PTR STATUS+1
  37.     SAHF
  38.     JB    IMAGINARY
  39.     FSQRT            ; SQR(D)    ;
  40.     FLD    ST0        ; SQR(D)    ;   SQR(D)
  41.     FCHS            ; -SQR(D)    ;   SQR(D)
  42.     FIADD    B        ; B-SQR(D)    ;   SQR(D)
  43.     FCHS            ; -B+SQR(D)    ;   SQR(D)
  44.     FXCH    ST1        ;   SQR(D)    ; -B+SQR(D)
  45.     FIADD    B        ;  B+SQR(D)    ; -B+SQR(D)
  46.     FCHS            ;N1= -B-SQR(D)    ;N2= -B+SQR(D)
  47.     FIDIV    A        ;  N1/A     ;      N2
  48.     FIDIV    TWO        ; ROOT1 =N1/2A    ;      N2
  49.     CALL    FLOAT_ASCII    ;      N2
  50.     FIDIV    A        ;   N2/A    ;
  51.     FIDIV    TWO        ; ROOT2 = N2/2A ;
  52.     CALL    FLOAT_ASCII    ;    ?    ;
  53.     RET
  54. IMAGINARY:
  55.     MOV    DX,OFFSET ERROR_MSG
  56.     MOV    AH,9
  57.     INT    21H
  58.     RET
  59. QUADRATIC    ENDP
  60. CODE    ENDS
  61.     END    QUADRATIC
  62.